package com.dek.ssm.ch11.game;

import com.dek.ssm.ch11.game.impl.GameServiceImpl;

/**
 * 当一个对象通过 ProxyBeanFactory 的 getBean 方法定义后 ，拥有这样的约定。
	Cl) Bean 必须是一个实现了某一个接口的对象。
	(2 ）最先会执行拦截器的 before 方法。
	(3 ）其次执行 Bean 的方法（通过反射的形式） 。
	( 4 ）执行 Bean 方法时，无论是否产生异常，都会执行 after 方法。
	( 5 ）执行 Bean 方法时 ，如 果不产生异常，则执行 afterRetuming 方法 ：如果产生异常，
	则执行 afterThrowing 方法。
 *
 */
public class ProxyBeanFactory {
	
	public static <T> T getBean(T obj, Interceptor interceptor) {
		return (T) ProxyBeanUtil.getBean(obj, interceptor);
	}
	
	public static void main(String[] args) {
		GameService gameService = new GameServiceImpl();
		Interceptor interceptor = new MyInterceptor();
		GameService proxy = ProxyBeanFactory.getBean(gameService, interceptor);
		gameService.printGame("props");
		
		proxy.printGame(null);
	}
	
}
